package com.spring.demo.webflux.demo.test;

import reactor.core.publisher.Flux;

/**
 * SampleSubscriber 类继承自 BaseSubscriber，在 Reactor 中, 推荐用户扩展它来实现自定义的 Subscriber。这个类提供了一些 hook 方法，
 * 我们可以通过重写它们来调整 subscriber 的行为。 默认情况下，它会触发一个无限个数的请求，但是当你想自定义请求元素的个数的时候，
 * 扩展 BaseSubscriber 就很方便了。
 * 扩展的时候通常至少要覆盖 hookOnSubscribe(Subscription subscription) 和 hookOnNext(T value) 这两个方法
 * 建议你同时重写 hookOnError、hookOnCancel，以及 hookOnComplete 方法。 你最好也重写 hookFinally 方法。
 * SampleSubscribe 确实是一个最简单的实现了 请求有限个数元素的 Subscriber。
 * @author wangzhilong
 * @date 2021/3/15
 */
public class SampleSubscriberDemo {

    public static void main(String[] args) throws InterruptedException {
        SampleSubscriber<Integer> ss = new SampleSubscriber<>();
        Flux<Integer> ints = Flux.range(1, 4);
        ints.subscribe(
                i -> System.out.println(i),
                error -> System.out.println("Error:" + error),
                () -> System.out.println("runnable done"),
                s -> ss.request(1)
        );
        ints.subscribe(ss);
        Thread.sleep(1000);
    }


}
